//package com.holyant.report.dto;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.TypeReference;
//import com.ruoyi.common.core.utils.StringUtils;
//import com.fkmalls.sales.api.emuns.OrderChannelEnum;
//import com.fkmalls.stock.api.enums.InoutBillTypeEnum;
//import lombok.AllArgsConstructor;
//import lombok.Builder;
//import lombok.Data;
//import lombok.NoArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.util.CollectionUtils;
//
//import java.math.BigDecimal;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Map;
//import java.util.Objects;
//import java.util.stream.Collectors;
//
///**
// * 进销存结转统计-本期入库数量明细json
// *
// * @author zgx *
// * @date 2024年03月19日 14:13
// */
//@Slf4j
//@Data
//@Builder
//@AllArgsConstructor
//@NoArgsConstructor
//public class RptInventoryInDataDto {
//
//    /**
//     * 采购入库
//     */
//    private BigDecimal purchaseInQty;
//
//
//    /**
//     * c2p 退货入库数
//     */
//    private BigDecimal returnC2pInQty;
//
//    /**
//     * POP 退货入库数
//     */
//    private BigDecimal returnPopInQty;
//
//
//    /**
//     * B2B 退货入库数
//     */
//    private BigDecimal returnB2bInQty;
//
//    /**
//     * KA 退货入库数
//     */
//    private BigDecimal returnKaInQty;
//
//    /**
//     * WM 退货入库数
//     */
//    private BigDecimal returnWmInQty;
//
//    /**
//     * 调整入库数
//     */
//    private BigDecimal adjustInQty;
//
//    /**
//     * 其他入库数
//     */
//    private BigDecimal otherInQty;
//
//
//    public static RptInventoryInDataDto mergeInDataDto(RptInventoryInDataDto sourceData, String inData2) {
//        RptInventoryInDataDto inventoryInDataDto = new RptInventoryInDataDto();
//
//        List<RptInventoryInDataDto> rptInventoryInDataDtos = Arrays.asList(Objects.isNull(sourceData) ? initInDataDto() : sourceData, convertInDataDto(inData2));
//
//        inventoryInDataDto.setPurchaseInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getPurchaseInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setReturnC2pInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getReturnC2pInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setReturnPopInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getReturnPopInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setReturnB2bInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getReturnB2bInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setReturnKaInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getReturnKaInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setReturnWmInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getReturnWmInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setAdjustInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getAdjustInQty).reduce(BigDecimal::add).get());
//        inventoryInDataDto.setOtherInQty(rptInventoryInDataDtos.stream().map(RptInventoryInDataDto::getOtherInQty).reduce(BigDecimal::add).get());
//
//        return inventoryInDataDto;
//    }
//
//    public static RptInventoryInDataDto convertInDataDto(String inData) {
//        if (StringUtils.isEmpty(inData)) {
//            return initInDataDto();
//        }
//
//        if (inData.equals("[]")) {
//            return initInDataDto();
//        }
//
//        // 适应之前旧数据
//        try {
//            return JSON.parseObject(inData, new TypeReference<RptInventoryInDataDto>() {
//            });
//        }catch (Exception e){
//
//        }
//        return initInDataDto();
//    }
//
//
//    private static RptInventoryInDataDto initInDataDto() {
//        RptInventoryInDataDto inDataDto = new RptInventoryInDataDto();
//        inDataDto.setPurchaseInQty(BigDecimal.ZERO);
//        inDataDto.setReturnC2pInQty(BigDecimal.ZERO);
//        inDataDto.setReturnPopInQty(BigDecimal.ZERO);
//        inDataDto.setReturnB2bInQty(BigDecimal.ZERO);
//        inDataDto.setReturnKaInQty(BigDecimal.ZERO);
//        inDataDto.setReturnWmInQty(BigDecimal.ZERO);
//        inDataDto.setAdjustInQty(BigDecimal.ZERO);
//        inDataDto.setOtherInQty(BigDecimal.ZERO);
//        return inDataDto;
//    }
//
//
//    public static RptInventoryInDataDto convertRptInventoryInDataDto(List<RptInventoryInOutQtyDto> inventorys) {
//        RptInventoryInDataDto inventoryInDataDto = new RptInventoryInDataDto();
//
//        List<RptInventoryInOutQtyDto> channelLists = inventorys.stream().filter(item -> StringUtils.isNotEmpty(item.getChannel()))
//                .filter(item -> item.getBillType().equals(InoutBillTypeEnum.SALES_RETURN.getCode()))
//                .collect(Collectors.toList());
//
//
//        // 设置退货入库数量
//        if (CollectionUtils.isEmpty(channelLists)) {
//            inventoryInDataDto.setReturnC2pInQty(BigDecimal.ZERO);
//            inventoryInDataDto.setReturnPopInQty(BigDecimal.ZERO);
//            inventoryInDataDto.setReturnB2bInQty(BigDecimal.ZERO);
//            inventoryInDataDto.setReturnKaInQty(BigDecimal.ZERO);
//            inventoryInDataDto.setReturnWmInQty(BigDecimal.ZERO);
//        } else {
//            Map<String, List<RptInventoryInOutQtyDto>> channelMaps = channelLists.stream().collect(Collectors.groupingBy(RptInventoryInOutQtyDto::getChannel));
//
//            List<RptInventoryInOutQtyDto> c2pLists = channelMaps.get(OrderChannelEnum.C2P.getCode());
//            List<RptInventoryInOutQtyDto> popLists = channelMaps.get(OrderChannelEnum.POP.getCode());
//            List<RptInventoryInOutQtyDto> b2bLists = channelMaps.get(OrderChannelEnum.B2B.getCode());
//            List<RptInventoryInOutQtyDto> kaLists = channelMaps.get(OrderChannelEnum.KA.getCode());
//            List<RptInventoryInOutQtyDto> wmLists = channelMaps.get(OrderChannelEnum.WM.getCode());
//
//            inventoryInDataDto.setReturnC2pInQty((CollectionUtils.isEmpty(c2pLists) ? BigDecimal.ZERO : c2pLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()));
//            inventoryInDataDto.setReturnPopInQty((CollectionUtils.isEmpty(popLists) ? BigDecimal.ZERO : popLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()));
//            inventoryInDataDto.setReturnB2bInQty((CollectionUtils.isEmpty(b2bLists) ? BigDecimal.ZERO : b2bLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()));
//            inventoryInDataDto.setReturnKaInQty((CollectionUtils.isEmpty(kaLists) ? BigDecimal.ZERO : kaLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()));
//            inventoryInDataDto.setReturnWmInQty((CollectionUtils.isEmpty(wmLists) ? BigDecimal.ZERO : wmLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()));
//        }
//
//        List<RptInventoryInOutQtyDto> adjustLists = inventorys.stream().filter(item -> Objects.nonNull(item.getBillType()))
//                .filter(item -> item.getBillType().equals(InoutBillTypeEnum.ADJUST_IN.getCode()))
//                .collect(Collectors.toList());
//
//        // 设置调整入库数量
//        inventoryInDataDto.setAdjustInQty((
//                        CollectionUtils.isEmpty(adjustLists) ? BigDecimal.ZERO
//                                : adjustLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()
//                )
//        );
//
//
//        List<RptInventoryInOutQtyDto> otherLists = inventorys.stream().filter(item -> Objects.nonNull(item.getBillType()))
//                .filter(item -> !item.getBillType().equals(InoutBillTypeEnum.SALES_RETURN.getCode()))
//                .filter(item -> !item.getBillType().equals(InoutBillTypeEnum.ADJUST_IN.getCode()))
//                .filter(item -> !item.getBillType().equals(InoutBillTypeEnum.PUR_IN.getCode()))
//                .collect(Collectors.toList());
//
//
//        // 设置其他入库数量
//        inventoryInDataDto.setOtherInQty((
//                        CollectionUtils.isEmpty(otherLists) ? BigDecimal.ZERO
//                                : otherLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()
//                )
//        );
//
//
//        List<RptInventoryInOutQtyDto> purchaseInLists = inventorys.stream().filter(item -> Objects.nonNull(item.getBillType()))
//                .filter(item -> item.getBillType().equals(InoutBillTypeEnum.PUR_IN.getCode()))
//                .collect(Collectors.toList());
//
//        // 设置采购入库数量
//        inventoryInDataDto.setPurchaseInQty((
//                        CollectionUtils.isEmpty(purchaseInLists) ? BigDecimal.ZERO
//                                : purchaseInLists.stream().map(RptInventoryInOutQtyDto::getQty).reduce(BigDecimal::add).get()
//                )
//        );
//
//
//        return inventoryInDataDto;
//    }
//
//
//}
